package com.scott.proxy.lesson02.service.proxy;

import java.lang.reflect.Method;

import com.scott.proxy.InvocationHandler;


/**
 * 这个类的写法是固定的
 * 事务代理
 */ 
public class TransactionProxy implements InvocationHandler {

	/**
	 * 目标对象  被代理的对象  对哪个对象进行代理
	 */
	Object target = null;
	
	/**
	 * 利用构造方法把被代理的对象交给代理对象处理
	 */
	public TransactionProxy(Object target) {
		super();
		this.target = target;
	}

	@Override
	public void invoke(Object proxy, Method method) {
		String proxyName =proxy.getClass().getName();
		System.out.println("代理对象["+proxyName+"]开始事务....");
		
		//调用被代理对象自己的方法 tank.move() 基于1个假设 方法没有参数
		try{
			method.invoke(target);
		}catch(Exception e){
			System.out.println("代理对象["+proxyName+"]回滚事务....");
			e.printStackTrace();
		}
		System.out.println("代理对象["+proxyName+"]提交事务....");
		System.out.println();
	}

}
